package org.eztouch.zuul;

import org.eztouch.zuul.filter.TokenFilter;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;

/**
 * 服务网关<br>
 * 
 * 服务网关是微服务架构中一个不可或缺的部分。<br>
 * 通过服务网关统一向外系统提供REST API的过程中，除了具备服务路由、均衡负载功能之外，它还具备了权限控制等功能。<br>
 * <br>
 * Spring Cloud Netflix中的Zuul就担任了这样的一个角色，为微服务架构提供了前门保护的作用，<br>
 * 同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面，使得服务集群主体能够具备更高的可复用性和可测试性。
 * 
 * @author eztouch
 *
 */
@EnableZuulProxy  //注解开启Zuul
@SpringCloudApplication //它整合了@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker
public class ZuulServer {
	public static void main(String[] args) {
		new SpringApplicationBuilder(ZuulServer.class).web(true).run(args);
	}
	
	@Bean
	public TokenFilter getTokenFilter(){
		return new TokenFilter();
	}
}
